perm filename EXPRED.SAI[PIC,HE] blob sn#430339 filedate 1979-04-04 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00002 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	ENTRY expred
C00006 ENDMK
C⊗;
ENTRY expred;
BEGIN "EXPRED"
REQUIRE "36A" COMPILER!SWITCHES;
REQUIRE "BUFDEC" SOURCE!FILE;
INTERNAL INTEGER PROCEDURE expred(INTEGER INBUF,FACTOR; reference integer varbuf);
    BEGIN "expred"
    INTEGER ROWNUM,COLNUM,NEWROW,NEWCOL,OUTBUF,ICOL,JCOL,KCOL,
	i,j,t,v,vptr,
    IROW,JROW,KROW,PTVAL,II,RSTOP,CSTOP,PTR1,PTR2;
    real inc,sum,p,nvar,newpt;
    safe real array distri[1:factor,1:factor];
    DEFINE !="COMMENT";
    simple internal real procedure fcn(real x);
	return(8*(2↑(-x)));

    inc←(factor+1.0)/2.0;
    sum←0.0;
    for i←1 thru factor do
	for j←1 thru factor do
	sum←sum+(distri[i,j]←fcn(sqrt((i-inc)↑2+(j-inc)↑2)));
    for i←1 thru factor do
	for j←1 thru factor do
	distri[i,j]←distri[i,j]/sum;
    NEWROW←(ROWNUM←ROWS(INBUF))/FACTOR;		! ROWS IN NEW PIX;
    NEWCOL←(COLNUM←COLMS(INBUF))/FACTOR;		! COLMS IN NEW PIX;
    GETBUF(NEWROW,NEWCOL,BYTSZ(INBUF),OUTBUF←fndbuf);		! create the buffers;
    GETBUF(NEWROW,NEWCOL,BYTSZ(INBUF),varbuf←fndbuf);

    !  THIS LOOP DOES IT;

	! INDEX THROUGH NEW PICTURE;
    FOR IROW←1 STEP 1 UNTIL NEWROW DO 
	BEGIN
	PTR1←OUTPTR(IROW,1,OUTBUF);
	vptr←outptr(irow,1,varbuf);
	JROW←1+(IROW-1)*FACTOR;		! START ROW OF SUB-MATRIX;
	RSTOP←JROW+FACTOR-1;		! LAST ROW OF SUB-M;
	FOR ICOL←1 STEP 1 UNTIL NEWCOL DO 
	    BEGIN
	    JCOL←1+(ICOL-1)*FACTOR;		! START COL OF SUB-MATRIX IN OLD PIX;
	    NEWPT←0;
	    i←1;
	    nvar←0.0;
	    CSTOP←JCOL+FACTOR-1;

	    ! THIS IS THE ACTUAL AVERAGING LOOP;
	    FOR KROW←JROW STEP 1 UNTIL RSTOP DO 
		BEGIN
		PTR2←INPTR(KROW,JCOL,INBUF);
		j←0;
		FOR KCOL←JCOL STEP 1 UNTIL CSTOP DO 
		    begin
		    NEWPT←NEWPT+(v←ILDB(PTR2))*(p←distri[i,j←j+1]);		! ADD THEM UP;
		    nvar←nvar+v*v*p;
		    end;
		i←i+1;
		END;
	    IDPB(t←NEWPT,PTR1);
	    idpb(t←nvar-newpt*newpt,vptr);
	    END;
	ROWCHK(CHKROW,ROWS,IROW,50);
	END;
    RETURN (OUTBUF);		! OUR RESULT IS THE NEW BUFFER;
    END "expred";
END "EXPRED";